package com.baizhi.listener;

import com.baizhi.dao.CmfzLogDao;
import com.baizhi.entity.CmfzLog;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.activemq.Message;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Service;

import javax.jms.JMSException;
import javax.jms.TextMessage;
import java.io.IOException;

/*
* 消息队列activeMQ的监听器类   负责监听该队列中的消息  将其中的消息（日志）添加到数据库
* */
@Service
public class ActiveMqListener {
    //装配一个日志dao对象  操作数据库
    @Autowired
    private CmfzLogDao cmfzLogDao;

    /*
     * 监听MQ服务端中的 cmfz-log队列   将其中的内容（日志json）添加到数据库
     *  @JmsListener 可以把一个方法变为 Mq的监听器方法
     *  方法的形参必须为 Message
     *  该方法不需要手动调用 在项目启动之后 SpringBoot会自动进行调用
     */
    @JmsListener(destination = "cmfz-log")
    public void addLogByMQ(Message message){
        //1、将监听到的message  强转为TextMessage形式   然后获取到其中的消息字符串内容 即是对象序列化的json
        TextMessage textMessage = (TextMessage) message;
        try {
            String json = textMessage.getText();
            //2、将json反序列化为日志对象
            ObjectMapper mapper = new ObjectMapper();
            CmfzLog cmfzLog = mapper.readValue(json, CmfzLog.class);
            //3、添加到数据库
            cmfzLogDao.insert(cmfzLog);
        } catch (JMSException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
